package com.easy.common.util;
import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTValidator;
import cn.hutool.jwt.signers.JWTSignerUtil;
import io.jsonwebtoken.*;
import io.jsonwebtoken.security.Keys;

import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class JWTUtil {

    /**
     * 签名  每次重启服务签名都会动态生成
     */
    public static final String SECRET_KEY = "Easy";
    /**
     * token有效时间
     */
    private static final long EXPIRATION = 86400000; // 24小时

    /**
     * 生成token
     * @param map  需要加载的数据
     * @return
     */
    public static String generateToken(Map map) {
        return JWT.create().setExpiresAt(new Date(System.currentTimeMillis()+EXPIRATION))
                .setKey(SECRET_KEY.getBytes())
                .sign();
    }

    /**
     * 解析token
     * @param token
     * @return
     */
    public static Object parseToken(String token) {
        JWT jwt= cn.hutool.jwt.JWTUtil.parseToken(token);
        System.out.println(jwt);
        return jwt;
    }
    public static boolean verifyToken(String token){
        //验证签名
       if( !cn.hutool.jwt.JWTUtil.verify(token, SECRET_KEY.getBytes())){
           throw new RuntimeException("签名异常");
       }
       try {
           JWTValidator.of(token).validateDate();
       }catch(Exception e){
           throw new RuntimeException("签名过期");
       }
      return true;
    }


//    public static void main(String[] args) {
//        Map map=new HashMap();
//        map.put("name","zhangsan");
////        String token =generateToken(map);
//      String  token="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3NDQyNjkxODR9.RNtWTDaBhu-n8Xdz5Q8B4lqTR0NfvuMZA5HbPiqANmc";
//        System.out.println(token);
//        System.out.println(parseToken(token));
//        System.out.println(verifyToken(token));
//    }

}
